package com.two.screen.water.balance.net.observer

import android.app.Activity
import com.two.screen.water.balance.bean.BaseBean
import com.two.screen.water.balance.utils.CommUtils
import io.reactivex.Observer
import io.reactivex.disposables.Disposable

/**
 * 创建者     Noel
 * 创建时间   2018/1/20 16:55
 * 描述	       对Observer 根据后台返回的状态封装。
 */


abstract class BaseObserver<T>(
    protected var activity: Activity?
) : Observer<BaseBean<out T>> {
    protected var mDisposable: Disposable? = null

    override fun onNext(t: BaseBean<out T>) {
        when (t.code) {
            200 -> { //请求成功
                if (t.data != null || t.rows != null) {
                    onSuccessNext(t)
                } else {
                    dataIsNull(t)
                }
            }
            -1 -> { //Token已过期或注销
                //TODO:调用弹出对话框，退出app
                /*if (!App.isShowLogoutDialog) {
                    App.isShowLogoutDialog = true*/
                CommUtils.showLogoutDialog(activity, t.message ?: t.msg ?: "")
                /* }*/
                onError(IllegalStateException(t.msg))/*"Token已过期或注销。" +*/
            }
            else -> { //0失败，或者其他原因
                onError(IllegalStateException(t.msg))
            }
        }
    }

    /*请求数据基类返的data为空*/
    protected open fun dataIsNull(t: BaseBean<out T>) {
        if (!isHandleRequestMultiData()) mDisposable!!.dispose()
    }

    protected abstract fun onSuccessNext(t: BaseBean<out T>)

    /*开启处理异步请求多个数据，同步处理。例如：false之后，一旦其中一个请求失败或者为空，则取消剩余的请求*/
    protected open fun isHandleRequestMultiData(): Boolean = false
}
